<?php defined('SYSPATH') or die('No direct script access.');

abstract class Model_ReviewParser_Abstract
{ 
    protected static $_instance = null;      // Экземпляр класса - реализация Синглтон
    
    /**
    * Защищенный конструктор - реализация Синглтон
    * 
    * @return Model_ReviewParser_YandexMarket
    */
    protected function __construct()
    {
    }
    
    /**
    * Получить экземпляр класса - реализация Синглтон
    */
    public static function instance()
    {
        if (self::$_instance !== null) {
            return self::$_instance;
        }   
        
        static::$_instance = new static;
        return static::$_instance; 
    }
    
    public static function _get_source_code($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');  
        curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); 
        curl_setopt($ch, CURLOPT_HEADER, true);
		//curl_setopt($ch, CURLOPT_PROXY, '82.200.254.34:9090');
        $output = curl_exec($ch);
        curl_close($ch);
		
		if ($output) {
			list($header, $body) = explode("\r\n\r\n", $output);
			
			$headers = explode("\r\n", $header);
			$status  = explode(' ', $headers[0]);
			if ($status[1] == 301 || $status[1] == 302) {
				foreach ($headers as $item) {
					if (strstr($item, 'Location:') !== false) {
						$url = trim(str_replace('Location: ', '', $item));
						return self::_get_source_code($url);
					}
				}
			}

			return $body;  
		}	
		return $output; 		
    }   
    
    public static function _cut_str($start, $stop, &$str)
    {      
        $spos = strpos ($str, $start);      //Поиск начала
        
        if ($spos === false) {
            return null;
        }
        
        $spos = $spos + strlen($start);     //Удлиняем позицию на длину строки, чтобы не включать ее в результат
        $text = substr ($str, $spos);       //Режем строку от этой позиции
        $end_pos = strpos ($text,$stop);    // Ищем конец в полученной строке
        
        if ($end_pos === false) {
            return null;
        }
        
        $text = substr ($text,0,$end_pos);  //Режем по конечной позиции     
        $str = str_replace($start.$text.$stop, '', $str);   // Удаляем найденное
        
        return trim($text);                                                                                                                                            
    } 
}